package com.app.car.util;

import android.text.TextUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UnitUtil {

    //    原文链接：https://blog.csdn.net/qq_34542964/article/details/72869880



    /**
     * 获取转换比
     * @param unit  开始单位
     * @param toUnit 结束单位
     * @return 返回比率
     */
    public static double getRatio(String unit, String toUnit) {
        int power = -1;
        if (unit == null || "".equals(unit) || toUnit == null
                || "".equals(toUnit)) {
            power = -1;
        } else {
            int start = getPower(unit);
            int end = getPower(toUnit);
            if (start == 0 || end == 0) {
                power = -1;
            }else if(start == end){
                power = 0;
            }else {
                power = start - end;
            }
        }
        if(power == -1){
            return 0;
        }
        return Math.pow(10, power);
    }


    /**
     * 获取值最小单位的比率 
     * 			重量单位只能计算至微克 
     * 			体积单位只能计算至微升
     * @param unit
     *            传入的单位
     * @return 返回比率是次幂
     */
    private static int getPower(String unit) {
        if ("kg".equalsIgnoreCase(unit) || "公斤".equals(unit) || "千克".equals(unit)) {
            return 12;
        }
        if ("g".equalsIgnoreCase(unit) || "克".equals(unit)) {
            return 9;
        }
        if ("mg".equalsIgnoreCase(unit) || "毫克".equals(unit)) {
            return 6;
        }
        if ("ug".equalsIgnoreCase(unit) || "微克".equals(unit)) {
            return 3;
        }
        if ("l".equalsIgnoreCase(unit) || "升".equals(unit)) {
            return 9;
        }
        if ("ml".equalsIgnoreCase(unit) || "毫升".equals(unit)) {
            return 6;
        }
        if ("ul".equalsIgnoreCase(unit) || "微升".equals(unit)) {
            return 3;
        }

        if ("百万iu".equals(unit) || "百万单位".equals(unit) || "百万u".equals(unit)) {
            return 9;
        }
        if ("万iu".equals(unit) || "万单位".equals(unit) || "万u".equals(unit)) {
            return 7;
        }
        if ("iu".equalsIgnoreCase(unit) || "单位".equals(unit)) {
            return 3;
        }
        if ("cm".equalsIgnoreCase(unit)) {
            return 3;
        }
        return 0;
    }


    /**
     * 正则匹配  把要转换的String转换为值、单位的对象
     * @param value
     * @return
     */
    public static String replaceAndGetUnit(String value) {
        if(TextUtils.isEmpty(value)){
            return "g";
        }
        String num = value.replaceAll("[a-zA-Z]", "").replaceAll("[\u4e00-\u9fa5]", ""); //去掉字母与中文
        String unit = value.replace(num, ""); //获取单位
        return unit;
    }

    /**
     * 正则匹配  把要转换的String转换为值、单位的对象
     * @param value
     * @return
     */
    public static String getUnitByString(String value) {
        if(TextUtils.isEmpty(value)){
            return "g";
        }
        String unit =  value.replaceAll("\\s*","").replaceAll("[^(A-Za-z)]","");
        return unit;
    }

    public static String getNumByString(String value){
        // 需要取整数和小数的字符串
        String str = value;
//		String str = "需要提取的字符串1.111";
        // 控制正则表达式的匹配行为的参数(小数)
        Pattern p = Pattern.compile("(\\d+\\.\\d+)");
        //Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
        Matcher m = p.matcher(str);
        if (m.find()) {
            //如果有相匹配的,则判断是否为null操作
            //group()中的参数：0表示匹配整个正则，1表示匹配第一个括号的正则,2表示匹配第二个正则,在这只有一个括号,即1和0是一样的
            str = m.group(1) == null ? "" : m.group(1);
        } else {
            //如果匹配不到小数，就进行整数匹配
            p = Pattern.compile("(\\d+)");
            m = p.matcher(str);
            if (m.find()) {
                //如果有整数相匹配
                str = m.group(1) == null ? "" : m.group(1);
            } else {
                //如果没有小数和整数相匹配,即字符串中没有整数和小数，就设为空
                str = "";
            }
        }

        return str;
    }

}
